
import { Transform } from "class-transformer";
import { IsArray, IsInt, IsNotEmpty, IsOptional, IsString, Matches, ValidationArguments } from "class-validator";

/*
 * @Author: c
 * @Date: 2023-12-03 02:18:10
 * @LastEditTime: 2024-01-14 20:33:56
 * @LastEditors: c
 * @Description: 
 * @FilePath: \music-web-backend\src\core\system\user\dto\create-user.dto.ts
 * https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
export class CreateUserDto {


    username: string; // 用户名


    nickname: string;  //昵称


    password: string;  // 密码


    avatar: string;   //头像

}


// 用户表单对象
export class BaseUserForm {

    // @IsInt({ message: "用户ID参数不正确" })
    id: number; //用户ID

    @IsNotEmpty({ message: "用户名不能为空" })
    @IsString({ message: "用户名必须是字符串" })
    username: string; //用户名-用户名不能为空

    @IsNotEmpty({ message: "昵称不能为空" })
    @IsString({ message: "昵称必须是字符串" })
    nickname: string; //昵称--昵称不能为空


    @Transform((value) => {

        return +value
    })
    @IsInt({ message: "手机号码必须是数字" })
    @Matches('^1[2|3|4|5|6|7|8|9][0-9]d{8}$', undefined, { each: true })
    mobile: number; //手机号码--手机号码格式不正确

    @Transform((value) => {
        if (!Number.isNaN(value)) {
            return Number(value);
        }

    })
    @IsInt({ message: "性别的参数类型不正确" })
    gender: number; //性别

    // @IsString({ message: "用户头像必须是字符串" })
    avatar: string; //用户头像

    @IsString({ message: "邮箱必须是字符串" })
    email: string; //邮箱

    @Transform((value) => {
        if (!Number.isNaN(value)) {
            return Number(value);
        }

    })
    // @IsIn([0, 1],{message:"用户状态"})
    @IsOptional()
    @IsInt({ message: "用户状态的参数类型不正确" })
    status: number; //用户状态(1:正常;0:禁用)



    @IsArray({ message: '用户角色必须是数组' })
    roleIds: number[];//角色ID集合--用户角色不能为空

}

export class UserForm extends BaseUserForm {

}


export class ResetUserPWD {




    @IsString({
        message: (val: ValidationArguments) => {

            return '必须是字符串'
        }
    })
    password: string;  // 密码




}
